﻿Public Class HijasTercero

    Private oMaestra As New CMaestras
    Private oFact As New CFacturacion
    Public idConsolidado As Integer
    Private dtValor1 As New DataTable
    Private dtValor2 As New DataTable
    Private dtConceptos As New DataTable
    Private idHija As Integer
    Private idValor1 As Integer
    Private idValor2 As Integer
    Private valorTRM As Double
    Private contadorValor1 As Integer
    Private contadorValor2 As Integer
    Private boolAereo As Boolean
    Private boolMaritimo As Boolean

    Private Sub HijasTercero_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Oculta el panel de los filtros
        Me.Panel1.Size = New Size(Me.Panel1.Width, 15)

        Me.dateFecha.Value = Date.Today
        Me.TabControl1.SelectedTab = Me.tabListado

        'Trae info de la grilla de los consolidados y llena los combos
        Me.CargarMonedas()
        Me.CargarClientes()
        Me.CargarUnidades()
        Me.CargarTiposContenedor()
        Me.CargarAgentes()
        Me.CargarConceptos()
        Me.CargarGrilla()
        Me.CargarGrillaValor1(True)
        Me.CargarGrillaValor2(True)
        Me.drpContacto.Items.Add("Seleccione un cliente")
        Me.contadorValor1 = 100000
        Me.contadorValor2 = 100000

        Me.CargarCiudades()        

        'Permisos de las opciones de aereo y maritimo 
        Me.boolAereo = False
        Me.boolMaritimo = True

    End Sub


#Region "Cargar combos"

    Public Sub CargarMonedas()
        Try
            Dim ds As New DataSet
            ds = oMaestra.GetTabla(CMaestras.Tabla.Moneda)
            If (ds.Tables(0).Rows.Count > 0) Then
                Dim dt As DataTable = ds.Tables(0).Copy
                Dim dt2 As DataTable = ds.Tables(0).Copy
                Me.drpMonedaTotalizar.DataSource = CUtil.AgregarRegistro(ds.Tables(0), "Seleccione...")
                Me.drpMonedaTotalizar.ValueMember = ds.Tables(0).Columns(0).ColumnName
                Me.drpMonedaTotalizar.DisplayMember = ds.Tables(0).Columns(1).ColumnName

                Me.drpMonedaValor1.DataSource = CUtil.AgregarRegistro(dt, "Seleccione...")
                Me.drpMonedaValor1.ValueMember = dt.Columns(0).ColumnName
                Me.drpMonedaValor1.DisplayMember = dt.Columns(1).ColumnName

                Me.drpMonedaValor2.DataSource = CUtil.AgregarRegistro(dt, "Seleccione...")
                Me.drpMonedaValor2.ValueMember = dt.Columns(0).ColumnName
                Me.drpMonedaValor2.DisplayMember = dt.Columns(1).ColumnName
            Else
                MessageBox.Show("No se encontraron monedas. Deben ser creadas primero", "Monedas", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al cargar las monedas: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Public Sub CargarClientes()
        Try
            Dim ds As New DataSet
            ds = oMaestra.GetTabla(CMaestras.Tabla.Cliente)
            If (ds.Tables(0).Rows.Count > 0) Then
                Me.drpCliente.DataSource = CUtil.AgregarRegistro(ds.Tables(0), "Seleccione...")
                Me.drpCliente.ValueMember = ds.Tables(0).Columns(0).ColumnName
                Me.drpCliente.DisplayMember = ds.Tables(0).Columns(1).ColumnName

                Dim dt As DataTable = ds.Tables(0).Copy

                Me.drpClienteBuscar.DataSource = dt
                Me.drpClienteBuscar.ValueMember = dt.Columns(0).ColumnName
                Me.drpClienteBuscar.DisplayMember = dt.Columns(1).ColumnName
            Else
                MessageBox.Show("No se encontraron clientes. Deben ser creados primero", "Clientes", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al cargar los clientes: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Public Sub CargarAgentes()
        Try
            Dim ds As New DataSet
            ds = oMaestra.GetTabla(CMaestras.Tabla.Agente)
            If (ds.Tables(0).Rows.Count > 0) Then
                Me.drpAgente.DataSource = CUtil.AgregarRegistro(ds.Tables(0), "Seleccione...")
                Me.drpAgente.ValueMember = ds.Tables(0).Columns(0).ColumnName
                Me.drpAgente.DisplayMember = ds.Tables(0).Columns(1).ColumnName
            Else
                MessageBox.Show("No se encontraron agentes. Deben ser creados primero", "Agentes", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al cargar los agentes: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Public Sub CargarConceptos()
        Try
            Dim ds As New DataSet
            ds = oMaestra.GetConceptosTipo("Terceros")
            If (ds.Tables(0).Rows.Count > 0) Then
                Me.dtConceptos = ds.Tables(0).Copy
                Dim dt1 As DataTable = ds.Tables(0).Copy
                Dim dt2 As DataTable = ds.Tables(0).Copy

                Me.drpConcepto.DataSource = CUtil.AgregarRegistro(dt1, "Seleccione...")
                Me.drpConcepto.ValueMember = dt1.Columns(0).ColumnName
                Me.drpConcepto.DisplayMember = dt1.Columns(1).ColumnName
                Me.drpConceptoTercero.DataSource = CUtil.AgregarRegistro(dt2, "Seleccione...")
                Me.drpConceptoTercero.ValueMember = dt2.Columns(0).ColumnName
                Me.drpConceptoTercero.DisplayMember = dt2.Columns(1).ColumnName
            Else
                MessageBox.Show("No se encontraron conceptos. Deben ser creados primero", "Conceptos", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al cargar los conceptos: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub CargarUnidades()
        'Construye tabla para cargar el combo de los tipos
        Dim dt As New DataTable
        dt.Columns.Add("ID")
        dt.Columns.Add("UNIDAD")
        Dim arrValues(1) As String
        arrValues(0) = "0"
        arrValues(1) = "Seleccione..."
        dt.Rows.Add(arrValues)
        arrValues(0) = "LIBRA"
        arrValues(1) = "Libra"
        dt.Rows.Add(arrValues)
        arrValues(0) = "KILO"
        arrValues(1) = "Kilo"
        dt.Rows.Add(arrValues)
        arrValues(0) = "TONELADA"
        arrValues(1) = "Tonelada"
        dt.Rows.Add(arrValues)

        Me.drpUnidadPeso.DataSource = dt
        Me.drpUnidadPeso.ValueMember = dt.Columns(0).ColumnName
        Me.drpUnidadPeso.DisplayMember = dt.Columns(1).ColumnName
    End Sub

    Private Sub CargarTiposContenedor()
        'Construye tabla para cargar el combo de los tipos
        Dim dt As New DataTable
        dt.Columns.Add("ID")
        dt.Columns.Add("TIPO")
        Dim arrValues(1) As String
        arrValues(0) = "0"
        arrValues(1) = "Seleccione..."
        dt.Rows.Add(arrValues)
        arrValues(0) = "20"
        arrValues(1) = "Contenedor 20"
        dt.Rows.Add(arrValues)
        arrValues(0) = "40"
        arrValues(1) = "Contenedor 40"
        dt.Rows.Add(arrValues)

        Me.drpTiposContenedor.DataSource = dt
        Me.drpTiposContenedor.ValueMember = dt.Columns(0).ColumnName
        Me.drpTiposContenedor.DisplayMember = dt.Columns(1).ColumnName
    End Sub
#End Region

    Private Sub CargarGrilla()
        Try
            Me.grdHijas.DataSource = Nothing
            Me.grdHijas.Columns.Clear()

            Dim ds As New DataSet
            ds = Me.oFact.GetHijasConsolidado(Me.idConsolidado)
            'Info general del consolidado
            Me.lblNumeroConsolidado.Text = ds.Tables(0).Rows(0)("NUMERO")
            Me.lblAgente.Text = ds.Tables(0).Rows(0)("AGENTE")
            Me.lblOrigen.Text = ds.Tables(0).Rows(0)("ORIGEN")
            Me.lblDestino.Text = ds.Tables(0).Rows(0)("DESTINO")
            Me.lblTipo.Text = ds.Tables(0).Rows(0)("TIPO")
            Me.lblTransporte.Text = ds.Tables(0).Rows(0)("TRANSPORTE")
            Me.lblMAWB.Text = ds.Tables(0).Rows(0)("MAWB")
            Me.lblFecha.Text = ds.Tables(0).Rows(0)("FECHA")
            Me.txtConsolidado.Text = ds.Tables(0).Rows(0)("NUMERO")
            Me.txtHBL.Text = ds.Tables(0).Rows(0)("MAWB")

            'Llena grilla de las hijas
            If (ds.Tables(1).Rows.Count > 0) Then
                ds.Tables(1).Columns("NUMERO").ColumnName = "HBL"
                Me.grdHijas.DataSource = Nothing
                Me.grdHijas.Columns.Clear()
                Me.grdHijas.DataSource = ds.Tables(1)

                Dim iconoEDITAR As New DataGridViewImageColumn()
                iconoEDITAR.ValuesAreIcons = False
                iconoEDITAR.Image = My.Resources.editar
                iconoEDITAR.HeaderText = "EDITAR"
                iconoEDITAR.Name = "EDITAR"
                Me.grdHijas.Columns.Add(iconoEDITAR)

                Dim iconoELIMINAR As New DataGridViewImageColumn()
                iconoELIMINAR.ValuesAreIcons = False
                iconoELIMINAR.Image = My.Resources.eliminar
                iconoELIMINAR.HeaderText = "ELIMINAR"
                iconoELIMINAR.Name = "ELIMINAR"
                Me.grdHijas.Columns.Add(iconoELIMINAR)

                Me.grdHijas.Columns("ID").Visible = False
                Me.grdHijas.Columns("EDITAR").Width = 60
                Me.grdHijas.Columns("ELIMINAR").Width = 70
            Else
                Me.grdHijas.DataSource = Nothing
                Me.grdHijas.Columns.Clear()
            End If

        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al cargar las hijas: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub drpCliente_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles drpCliente.SelectionChangeCommitted
        Me.TraerContactosCliente(CInt(Me.drpCliente.SelectedValue))
    End Sub

    Private Sub TraerContactosCliente(ByVal cliente As Integer)
        'Trae los contactos del cliente y su nit
        Try
            Me.drpContacto.DataSource = Nothing
            Me.drpContacto.Items.Clear()

            'Trae el nit del cliente
            Dim ds1 As New DataSet
            If (CInt(Me.drpCliente.SelectedValue) > 0) Then
                ds1 = Me.oMaestra.GetClienteById(CInt(Me.drpCliente.SelectedValue))
                Me.txtNIT.Text = ds1.Tables(0).Rows(0)("NIT").ToString
            Else
                Me.txtNIT.Text = ""
            End If

            'Trae los contacots del cliente
            Dim ds As New DataSet
            ds = oMaestra.GetContactosCliente(CInt(Me.drpCliente.SelectedValue))
            If (ds.Tables(0).Rows.Count > 0) Then
                Me.drpContacto.DataSource = CUtil.AgregarRegistro(ds.Tables(0), "Seleccione...")
                Me.drpContacto.ValueMember = ds.Tables(0).Columns(0).ColumnName
                Me.drpContacto.DisplayMember = ds.Tables(0).Columns(1).ColumnName
            Else
                Dim dt As New DataTable
                dt.Columns.Add("ID")
                dt.Columns.Add("CONTACTO")
                Dim arrValues(1) As String
                arrValues(0) = "0"
                arrValues(1) = "Este cliente no tiene contactos"
                dt.Rows.Add(arrValues)

                Me.drpContacto.DataSource = dt
                Me.drpContacto.ValueMember = dt.Columns(0).ColumnName
                Me.drpContacto.DisplayMember = dt.Columns(1).ColumnName
            End If
        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al cargar los contactos del cliente: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub rbtnCambio(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbtnPeso.CheckedChanged, rbtnVolumen.CheckedChanged, rbtnContenedores.CheckedChanged
        If (Me.rbtnPeso.Checked) Then
            Me.grpPeso.Enabled = True
            Me.grpVolumen.Enabled = False
            Me.grpContenedores.Enabled = False
        ElseIf (Me.rbtnVolumen.Checked) Then
            Me.grpPeso.Enabled = False
            Me.grpVolumen.Enabled = True
            Me.grpContenedores.Enabled = False
        ElseIf (Me.rbtnContenedores.Checked) Then
            Me.grpPeso.Enabled = False
            Me.grpVolumen.Enabled = False
            Me.grpContenedores.Enabled = True
        End If
    End Sub

#Region "Limpiar"

    Private Sub LimpiarValor1()
        Me.idValor1 = 0
        If (Me.drpConceptoTercero.Items.Count = 0) Then
            Me.drpConceptoTercero.Items.Add("No hay registros")
        End If
        Me.drpConceptoTercero.SelectedIndex = 0
        If (Me.drpAgente.Items.Count = 0) Then
            Me.drpAgente.Items.Add("No hay registros")
        End If
        Me.drpAgente.SelectedIndex = 0
        If (Me.drpMonedaValor1.Items.Count = 0) Then
            Me.drpMonedaValor1.Items.Add("No hay registros")
        End If
        Me.drpMonedaValor1.SelectedIndex = 0
        Me.txtValorValor1.Text = ""
    End Sub

    Private Sub LimpiarValor2()
        Me.idValor2 = 0
        If (Me.drpConcepto.Items.Count = 0) Then
            Me.drpConcepto.Items.Add("No hay registros")
        End If
        Me.drpConcepto.SelectedIndex = 0
        If (Me.drpMonedaValor2.Items.Count = 0) Then
            Me.drpMonedaValor2.Items.Add("No hay registros")
        End If
        Me.drpMonedaValor2.SelectedIndex = 0
        Me.txtValorValor2.Text = ""
    End Sub

    Private Sub LimpiarTodo()
        Me.LimpiarValor1()
        Me.LimpiarValor2()
        If (Me.drpMonedaTotalizar.Items.Count = 0) Then
            Me.drpMonedaTotalizar.Items.Add("No hay registros")
        End If
        Me.drpMonedaTotalizar.SelectedIndex = 0
        Me.txtConsecutivoControl.Text = ""
        Me.txtConsecutivoControl.Enabled = False
        Me.txtNumero.Text = ""
        Me.dateFecha.Value = Date.Today
        Me.txtBultos.Text = ""
        Me.lblFactura.Text = "Factura:"
        If (Me.drpCliente.Items.Count = 0) Then
            Me.drpCliente.Items.Add("No hay registros")
        End If
        Me.drpCliente.SelectedIndex = 0
        Me.drpContacto.DataSource = Nothing
        Me.drpContacto.Items.Clear()
        Me.drpContacto.Items.Add("Seleccione un cliente")
        Me.txtNIT.Text = ""
        Me.rbtnPeso.Checked = True
        Me.rbtnVolumen.Checked = False
        Me.rbtnContenedores.Checked = False
        Me.grpPeso.Enabled = True
        Me.grpVolumen.Enabled = False
        Me.grpContenedores.Enabled = False
        Me.txtPeso.Text = ""
        If (Me.drpUnidadPeso.Items.Count = 0) Then
            Me.drpUnidadPeso.Items.Add("No hay registros")
        End If
        Me.drpUnidadPeso.SelectedIndex = 0
        Me.txtVolumen.Text = ""
        Me.txtNumeroContenedores.Text = ""
        If (Me.drpTiposContenedor.Items.Count = 0) Then
            Me.drpTiposContenedor.Items.Add("No hay registros")
        End If
        Me.drpTiposContenedor.SelectedIndex = 0
        Me.grdValor1.DataSource = Nothing
        Me.grdValor1.Columns.Clear()
        Me.grdValor2.DataSource = Nothing
        Me.grdValor2.Columns.Clear()
        Me.lblTotal.Text = "Total:"
        Me.txtComentarios.Text = ""
        Me.txtDescripcionCarga.Text = ""
        Me.lblTRM.Text = "TRM:"
        Me.lblMonedaSubtotal1.Text = ""
        Me.lblMonedaSubTotal2.Text = ""
        Me.lblMonedaIVA.Text = ""
        Me.lblMonedaTotal.Text = ""
        Me.lblSubTotalConceptos.Text = 0
        Me.lblSubTotalTerceros.Text = 0        
        Me.lblTotal.Text = 0

        Me.idHija = 0
        Me.dtValor1.Rows.Clear()
        Me.dtValor2.Rows.Clear()
        Me.idValor1 = 0
        Me.idValor2 = 0
    End Sub

    Private Sub btnCancelarValor1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelarValor1.Click
        Me.LimpiarValor1()
    End Sub

    Private Sub btnCancelarValor2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelarValor2.Click
        Me.LimpiarValor2()
    End Sub

#End Region

#Region "Validar"

    Private Function ValidarValor1() As Boolean
        Dim mensaje As String = ""
        If (Me.drpConceptoTercero.SelectedValue = "0") Then
            MessageBox.Show("- Debe seleccionar el concepto que se va a facturar", "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        Else
            'Se obtiene la info del concepto que se va a agregar
            Dim tipo As String = ""
            Dim valor As Double = 0
            Dim iva As Integer = 0
            Dim minimo As Double = 0
            For i As Integer = 0 To Me.dtConceptos.Rows.Count - 1
                If (Me.dtConceptos.Rows(i)("ID").ToString = Me.drpConceptoTercero.SelectedValue) Then
                    tipo = Me.dtConceptos.Rows(i)("TIPO")
                    valor = Me.dtConceptos.Rows(i)("VALOR")
                    iva = Me.dtConceptos.Rows(i)("IVA")
                    minimo = Me.dtConceptos.Rows(i)("MINIMO")
                    Exit For
                End If
            Next

            Select Case tipo
                Case "PORCENTAJE"
                    mensaje += "- Este concepto no se puede agregar en los terceros porque se calcula como porcentaje" & Chr(13)
                Case "FIJO"
                    If (Me.drpMonedaValor1.SelectedValue = "0") Then
                        mensaje += "- Debe seleccionar la moneda" & Chr(13)
                    End If
                    If (Me.drpAgente.SelectedValue = "0") Then
                        mensaje += "- Debe seleccionar el agente" & Chr(13)
                    End If
                Case "LIBRE"
                    If (Me.drpMonedaValor1.SelectedValue = "0") Then
                        mensaje += "- Debe seleccionar la moneda" & Chr(13)
                    End If
                    If (Me.drpAgente.SelectedValue = "0") Then
                        mensaje += "- Debe seleccionar el agente" & Chr(13)
                    End If
                    If (Trim(Me.txtValorValor1.Text).Length = 0) Then
                        mensaje += "- Debe escribir el valor" & Chr(13)
                    Else
                        If Not IsNumeric(Trim(Me.txtValorValor1.Text)) Then
                            mensaje += "- El valor debe ser numérico" & Chr(13)
                        End If
                    End If
                Case "KILOS"
                    If (Me.drpMonedaValor1.SelectedValue = "0") Then
                        mensaje += "- Debe seleccionar la moneda" & Chr(13)
                    End If
                    If Not (Me.rbtnPeso.Checked) Then
                        mensaje += "- Para poder agregar este concepto se debe facturar por peso" & Chr(13)
                    End If
                    If (Me.txtPeso.Text = "") Then
                        mensaje += "- Para poder agregar este concepto se debe especificar el peso" & Chr(13)
                    Else
                        If Not IsNumeric(Me.txtPeso.Text) Then
                            mensaje += "- Para poder agregar este concepto el peso debe ser numérico" & Chr(13)
                        End If
                    End If
                    If (Me.drpUnidadPeso.SelectedValue = "0") Then
                        mensaje += "- Para poder agregar este concepto debe seleccionar la unidad de peso" & Chr(13)
                    End If
                    If (Trim(Me.txtValorValor1.Text).Length = 0) Then
                        Me.txtValorValor1.Text = "0"
                    End If
                    If (Me.drpAgente.SelectedValue = "0") Then
                        mensaje += "- Debe seleccionar el agente" & Chr(13)
                    End If
            End Select
        End If

        'Se valida que existe la trm entre la moneda del concepto que se va a agregar y la moneda en la que se totalizará
        If (Me.drpMonedaValor1.SelectedValue <> Me.drpMonedaTotalizar.SelectedValue) Then
            Dim cambio As Double = Me.oFact.GetCambio(CInt(Me.drpMonedaTotalizar.SelectedValue), CInt(Me.drpMonedaValor1.SelectedValue), CUtil.ConvertirFecha(Date.Today))
            'Si no se encontro el cambio se busca con las monedas cambiadas
            If (cambio = 0) Then
                cambio = Me.oFact.GetCambio(CInt(Me.drpMonedaValor1.SelectedValue), CInt(Me.drpMonedaTotalizar.SelectedValue), CUtil.ConvertirFecha(Date.Today))
            End If
            If (cambio = 0) Then
                mensaje += "- No existe trm entre la moneda seleccionada en el concepto y la moneda seleccionada para mostrar los totales" & Chr(13)
            Else
                Me.lblTRM.Text = "TRM: " & cambio.ToString
            End If
        End If


        'En los conceptos de terceros no puede haber mas de una moneda 
        '(si existieran como se mostraria la leyenda que muestra la trm que se esta aplicando)
        If (Me.dtValor1.Rows.Count > 0) Then
            If (Me.drpMonedaValor1.SelectedValue <> Me.dtValor1.Rows(0)("IDMONEDA").ToString) Then
                mensaje += "- No puede seleccionar dos monedas diferentes en los conceptos para terceros" & Chr(13)
            End If
        End If

        If (mensaje.Length > 0) Then
            MessageBox.Show(mensaje, "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        Else
            Return True
        End If
    End Function

    Private Function ValidarValor2() As Boolean
        Dim mensaje As String = ""

        If (Me.drpConcepto.SelectedValue = "0") Then
            MessageBox.Show("- Debe seleccionar el concepto que se va a facturar", "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        Else
            'Se obtiene la info del concepto que se va a agregar
            Dim tipo As String = ""
            Dim valor As Double = 0
            Dim iva As Integer = 0
            Dim minimo As Double = 0
            For i As Integer = 0 To Me.dtConceptos.Rows.Count - 1
                If (Me.dtConceptos.Rows(i)("ID").ToString = Me.drpConcepto.SelectedValue) Then
                    tipo = Me.dtConceptos.Rows(i)("TIPO")
                    valor = Me.dtConceptos.Rows(i)("VALOR")
                    iva = Me.dtConceptos.Rows(i)("IVA")
                    minimo = Me.dtConceptos.Rows(i)("MINIMO")
                    Exit For
                End If
            Next

            Select Case tipo
                Case "PORCENTAJE"
                    If (Me.drpMonedaValor2.SelectedValue = "0") Then
                        mensaje += "- Debe seleccionar la moneda" & Chr(13)
                    End If
                    'If (Trim(Me.txtValorValor2.Text).Length = 0) Then
                    '    mensaje += "- Debe escribir el valor" & Chr(13)
                    'Else
                    '    If Not IsNumeric(Trim(Me.txtValorValor2.Text)) Then
                    '        mensaje += "- El valor debe ser numérico" & Chr(13)
                    '    End If
                    'End If
                Case "FIJO"
                    If (Me.drpMonedaValor2.SelectedValue = "0") Then
                        mensaje += "- Debe seleccionar la moneda" & Chr(13)
                    End If
                Case "LIBRE"
                    If (Me.drpMonedaValor2.SelectedValue = "0") Then
                        mensaje += "- Debe seleccionar la moneda" & Chr(13)
                    End If
                    If (Trim(Me.txtValorValor2.Text).Length = 0) Then
                        mensaje += "- Debe escribir el valor" & Chr(13)
                    Else
                        If Not IsNumeric(Trim(Me.txtValorValor2.Text)) Then
                            mensaje += "- El valor debe ser numérico" & Chr(13)
                        End If
                    End If
                Case "KILOS"
                    If (Me.drpMonedaValor2.SelectedValue = "0") Then
                        mensaje += "- Debe seleccionar la moneda" & Chr(13)
                    End If
                    If Not (Me.rbtnPeso.Checked) Then
                        mensaje += "- Para poder agregar este concepto se debe facturar por peso" & Chr(13)
                    End If
                    If (Me.txtPeso.Text = "") Then
                        mensaje += "- Para poder agregar este concepto se debe especificar el peso" & Chr(13)
                    Else
                        If Not IsNumeric(Me.txtPeso.Text) Then
                            mensaje += "- Para poder agregar este concepto el peso debe ser numérico" & Chr(13)
                        End If
                    End If
                    If (Me.drpUnidadPeso.SelectedValue = "0") Then
                        mensaje += "- Para poder agregar este concepto debe seleccionar la unidad de peso" & Chr(13)
                    End If
            End Select
        End If

        'Se valida que existe la trm entre la moneda del concepto que se va a agregar y la moneda en la que se totalizará
        If (Me.drpMonedaValor2.SelectedValue <> Me.drpMonedaTotalizar.SelectedValue) Then
            Dim cambio As Double = Me.oFact.GetCambio(CInt(Me.drpMonedaTotalizar.SelectedValue), CInt(Me.drpMonedaValor2.SelectedValue), CUtil.ConvertirFecha(Date.Today))
            'Si no se encontro el cambio se busca con las monedas cambiadas
            If (cambio = 0) Then
                cambio = Me.oFact.GetCambio(CInt(Me.drpMonedaValor2.SelectedValue), CInt(Me.drpMonedaTotalizar.SelectedValue), CUtil.ConvertirFecha(Date.Today))
            End If
            If (cambio = 0) Then
                mensaje += "- No existe trm entre la moneda seleccionada en el concepto y la moneda seleccionada para mostrar los totales" & Chr(13)
            End If
        End If

        If (mensaje.Length > 0) Then
            MessageBox.Show(mensaje, "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        Else
            Return True
        End If
    End Function

    Private Function Validar() As Boolean
        Dim mensaje As String = ""

        If (Trim(Me.txtBultos.Text).Length = 0) Then
            mensaje += "- Debe escribir la cantidad de bultos" & Chr(13)
        Else
            If Not IsNumeric(Trim(Me.txtBultos.Text)) Then
                mensaje += "- La cantidad de bultos solo puede contener números" & Chr(13)
            End If
        End If
        If (Me.drpCliente.SelectedValue = "0") Then
            mensaje += "- Debe seleccionar el cliente" & Chr(13)
        End If

        If (Me.rbtnPeso.Checked) Then
            If (Trim(Me.txtPeso.Text).Length = 0) Then
                mensaje += "- Debe escribir el peso" & Chr(13)
            Else
                If Not IsNumeric(Trim(Me.txtPeso.Text)) Then
                    mensaje += "- El peso debe ser numérico" & Chr(13)
                End If
            End If
            If (Me.drpUnidadPeso.SelectedValue = "0") Then
                mensaje += "- Debe seleccionar la unidad de peso" & Chr(13)
            End If
        ElseIf (Me.rbtnVolumen.Checked) Then
            If (Trim(Me.txtVolumen.Text).Length = 0) Then
                mensaje += "- Debe escribir el volumen" & Chr(13)
            Else
                If Not IsNumeric(Trim(Me.txtVolumen.Text)) Then
                    mensaje += "- El volumen debe ser numérico" & Chr(13)
                End If
            End If
        ElseIf (Me.rbtnContenedores.Checked) Then
            If (Trim(Me.txtNumeroContenedores.Text).Length = 0) Then
                mensaje += "- Debe escribir el número de contenedores" & Chr(13)
            Else
                If Not IsNumeric(Trim(Me.txtNumeroContenedores.Text)) Then
                    mensaje += "- El número de contenedores solo puede contener números" & Chr(13)
                End If
            End If
            If (Me.drpTiposContenedor.SelectedValue = "0") Then
                mensaje += "- Debe seleccionar el tipo de contenedor" & Chr(13)
            End If
        End If

        'If (Me.dtValor1.Rows.Count = 0) Then
        ' mensaje += "- Debe escribir al menos un concepto para facturar" & Chr(13)
        'End If

        If (Me.txtConsecutivoControl.Enabled) Then
            If (Trim(Me.txtConsecutivoControl.Text).Length = 0) Then
                mensaje += "- El consecutivo de control no puede quedar vacío" & Chr(13)
            Else
                If Not IsNumeric(Trim(Me.txtConsecutivoControl.Text)) Then
                    mensaje += "- El consecutivo de control solo puede contener números" & Chr(13)
                End If
            End If
        End If

        'Si se esta editando una hija el numero no puede quedar en blanco
        If (Me.idHija > 0) Then
            If (Trim(Me.txtNumero.Text) = "") Then
                mensaje += "- El número de la hija no puede quedar vacío" & Chr(13)
            End If
        End If

        If (mensaje.Length > 0) Then
            MessageBox.Show(mensaje, "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        Else
            Return True
        End If
    End Function

#End Region


#Region "Eventos de las grillas"

    Private Sub grdHijas_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdHijas.CellDoubleClick
        '*** Permite editar o eliminar
        'Se obtiene la info del registro
        Dim id As Integer = Me.grdHijas.Rows(e.RowIndex).Cells("ID").Value
        Dim factura As String = Me.grdHijas.Rows(e.RowIndex).Cells("FACTURA").Value

        Select Case Me.grdHijas.Columns(e.ColumnIndex).Name
            Case "EDITAR"
                Me.EditarHija(id)
            Case "ELIMINAR"
                If (factura <> "" And factura <> "0") Then
                    MessageBox.Show("No se puede eliminar porque ya tiene una factura", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Else
                    Me.EliminarHija(id)
                End If
        End Select

    End Sub

    Private Sub grdHijas_CellMouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdHijas.CellMouseEnter
        '*** Coloca la manito cuando el mouse entra en las celdas de editar y eliminar
        If (Me.grdHijas.Columns(e.ColumnIndex).Name = "EDITAR" Or Me.grdHijas.Columns(e.ColumnIndex).Name = "ELIMINAR") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

    Private Sub grdHijas_CellMouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles grdHijas.CellMouseMove
        If (Me.grdHijas.Columns(e.ColumnIndex).Name = "EDITAR" Or Me.grdHijas.Columns(e.ColumnIndex).Name = "ELIMINAR") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

    Private Sub grdValor1_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdValor1.CellDoubleClick
        '*** Permite editar o eliminar
        'Se obtiene la info del registro
        Dim id As Integer = Me.grdValor1.Rows(e.RowIndex).Cells("ID").Value
        Dim concepto As String = Me.grdValor1.Rows(e.RowIndex).Cells("IDCONCEPTO").Value
        Dim idMoneda As Integer = Me.grdValor1.Rows(e.RowIndex).Cells("IDMONEDA").Value
        Dim idAgente As Integer = Me.grdValor1.Rows(e.RowIndex).Cells("IDAGENTE").Value
        Dim valor As Double = Me.grdValor1.Rows(e.RowIndex).Cells("VALOR").Value

        Select Case Me.grdValor1.Columns(e.ColumnIndex).Name
            Case "EDITAR"
                Me.idValor1 = id
                Me.drpConceptoTercero.SelectedValue = concepto
                Me.drpMonedaValor1.SelectedValue = idMoneda
                Me.drpAgente.SelectedValue = idAgente
                Me.txtValorValor1.Text = valor
            Case "ELIMINAR"
                Me.EliminarValor1(e.RowIndex, id)
        End Select
    End Sub

    Private Sub grdValor1_CellMouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdValor1.CellMouseEnter
        '*** Coloca la manito cuando el mouse entra en las celdas de editar y eliminar
        If (Me.grdValor1.Columns(e.ColumnIndex).Name = "EDITAR" Or Me.grdValor1.Columns(e.ColumnIndex).Name = "ELIMINAR") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

    Private Sub grdValor1_CellMouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles grdValor1.CellMouseMove
        If (Me.grdValor1.Columns(e.ColumnIndex).Name = "EDITAR" Or Me.grdValor1.Columns(e.ColumnIndex).Name = "ELIMINAR") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

    Private Sub grdValor2_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdValor2.CellDoubleClick
        '*** Permite editar o eliminar
        'Se obtiene la info del registro
        Dim id As Integer = Me.grdValor2.Rows(e.RowIndex).Cells("ID").Value
        Dim concepto As String = Me.grdValor2.Rows(e.RowIndex).Cells("IDCONCEPTO").Value
        Dim valor As Double = Me.grdValor2.Rows(e.RowIndex).Cells("VALOR").Value
        Dim idMoneda As Integer = Me.grdValor2.Rows(e.RowIndex).Cells("IDMONEDA").Value

        Select Case Me.grdValor2.Columns(e.ColumnIndex).Name
            Case "EDITAR"
                Me.idValor2 = id
                Me.drpConcepto.SelectedValue = concepto
                Me.txtValorValor2.Text = valor
                Me.drpMonedaValor2.SelectedValue = idMoneda
            Case "ELIMINAR"
                Me.EliminarValor2(e.RowIndex, id)
        End Select
    End Sub

    Private Sub grdValor2_CellMouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdValor2.CellMouseEnter
        '*** Coloca la manito cuando el mouse entra en las celdas de editar y eliminar
        If (Me.grdValor2.Columns(e.ColumnIndex).Name = "EDITAR" Or Me.grdValor2.Columns(e.ColumnIndex).Name = "ELIMINAR") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

    Private Sub grdValor2_CellMouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles grdValor2.CellMouseMove
        If (Me.grdValor2.Columns(e.ColumnIndex).Name = "EDITAR" Or Me.grdValor2.Columns(e.ColumnIndex).Name = "ELIMINAR") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

#End Region


#Region "Editar y eliminar"

    Private Sub EditarHija(ByVal id As Integer)
        Me.LimpiarTodo()
        Me.idHija = id
        Me.TraerDatosHija(id)
        Me.TabControl1.SelectedTab = Me.tabHijas
        Me.lblTRM.Focus()
    End Sub

    Private Sub EliminarHija(ByVal id As Integer)
        Try
            If (MessageBox.Show("¿Realmente desea eliminar esta hija?", "Eliminar hija", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes) Then
                Cursor = Cursors.WaitCursor
                Me.oFact.EliminarHija(id)
                Cursor = Cursors.Default
                MessageBox.Show("La hija ha sido eliminada", "Hija eliminada", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("NO se eliminó la hija: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try

        Me.CargarGrilla()
    End Sub

    Private Sub EliminarValor1(ByVal indice As Integer, ByVal id As Integer)
        Try
            If (MessageBox.Show("¿Realmente desea eliminar este concepto?", "Eliminar concepto", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes) Then
                Cursor = Cursors.WaitCursor
                'Si el id es cero, simplemente se elimina del datatable porque aun no esta en la bd
                If (id > 0) Then
                    Me.oFact.EliminarValor1(id)
                End If
                Me.dtValor1.Rows.RemoveAt(indice)
                Me.dtValor1.AcceptChanges()
                TotalizarValores()
                Cursor = Cursors.Default
                MessageBox.Show("El concepto ha sido eliminado", "Concepto eliminado", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("NO se eliminó el concepto: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub EliminarValor2(ByVal indice As Integer, ByVal id As Integer)
        Try
            If (MessageBox.Show("¿Realmente desea eliminar este concepto?", "Eliminar concepto", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes) Then
                Cursor = Cursors.WaitCursor
                'Si el id es cero, simplemente se elimina del datatable porque aun no esta en la bd
                If (id > 0) Then
                    Me.oFact.EliminarValor2(id)
                End If
                Me.dtValor2.Rows.RemoveAt(indice)
                Me.dtValor2.AcceptChanges()
                TotalizarValores()
                Cursor = Cursors.Default
                MessageBox.Show("El concepto ha sido eliminado", "Concepto eliminado", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("NO se eliminó el concepto: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

#End Region

    Private Sub TraerDatosHija(ByVal id As Integer)
        '*** Trae la informacion de la hija y llena los controles y grillas de la hija. Si el id le llega 0 es
        '*** porque se va a crear una nueva hija, tonces se limpian todos los controles
        If (id = 0) Then
            Me.LimpiarTodo()
            Me.idHija = 0
        Else
            Try
                Cursor = Cursors.WaitCursor
                Me.idHija = id
                Dim ds As New DataSet
                ds = Me.oFact.GetHijaById(Me.idHija)

                If (ds.Tables(0).Rows.Count > 0) Then
                    Me.drpMonedaTotalizar.SelectedValue = ds.Tables(0).Rows(0)("IDMONEDA")
                    Me.dateFecha.Value = ds.Tables(0).Rows(0)("FECHA")
                    Me.lblFactura.Text = "Factura: " & ds.Tables(0).Rows(0)("FACTURA")
                    Me.txtHBL.Text = Me.lblMAWB.Text
                    Me.txtConsolidado.Text = ds.Tables(0).Rows(0)("NUMEROCONSOLIDADO")
                    Me.idConsolidado = ds.Tables(0).Rows(0)("IDCONSOLIDADO").ToString
                    Me.txtBultos.Text = ds.Tables(0).Rows(0)("BULTOS")
                    Me.drpCliente.SelectedValue = ds.Tables(0).Rows(0)("IDCLIENTE")
                    Me.TraerContactosCliente(CInt(ds.Tables(0).Rows(0)("IDCLIENTE")))
                    Me.drpContacto.SelectedValue = ds.Tables(0).Rows(0)("IDCONTACTO")
                    Me.txtNIT.Text = ds.Tables(0).Rows(0)("NIT")
                    Me.txtComentarios.Text = ds.Tables(0).Rows(0)("COMENTARIOS")
                    Me.txtDescripcionCarga.Text = ds.Tables(0).Rows(0)("DESCRIPCIONCARGA")
                    Me.lblTRM.Text = "TRM: " & ds.Tables(0).Rows(0)("TRM")
                    Me.txtConsecutivoControl.Enabled = True
                    Me.txtConsecutivoControl.Text = ds.Tables(0).Rows(0)("CONSECUTIVO")
                    Me.txtNumero.Text = ds.Tables(0).Rows(0)("NUMERO")
                    Me.dateFechaPago.Value = ds.Tables(0).Rows(0)("FECHAPAGO")
                    Select Case ds.Tables(0).Rows(0)("FACTURAPOR").ToString
                        Case "PESO"
                            Me.rbtnPeso.Checked = True
                            Me.rbtnVolumen.Checked = False
                            Me.rbtnContenedores.Checked = False
                            Me.grpPeso.Enabled = True
                            Me.grpVolumen.Enabled = False
                            Me.grpContenedores.Enabled = False
                            Me.txtPeso.Text = ds.Tables(0).Rows(0)("PESO")
                            Me.drpUnidadPeso.SelectedValue = ds.Tables(0).Rows(0)("UNIDADPESO")
                        Case "VOLUMEN"
                            Me.rbtnPeso.Checked = False
                            Me.rbtnVolumen.Checked = True
                            Me.rbtnContenedores.Checked = False
                            Me.grpPeso.Enabled = False
                            Me.grpVolumen.Enabled = True
                            Me.grpContenedores.Enabled = False
                            Me.txtVolumen.Text = ds.Tables(0).Rows(0)("VOLUMEN")
                        Case "CONTENEDORES"
                            Me.rbtnPeso.Checked = False
                            Me.rbtnVolumen.Checked = False
                            Me.rbtnContenedores.Checked = True
                            Me.grpPeso.Enabled = False
                            Me.grpVolumen.Enabled = False
                            Me.grpContenedores.Enabled = True
                            Me.txtNumeroContenedores.Text = ds.Tables(0).Rows(0)("NUMEROCONTENEDORES")
                            Me.drpTiposContenedor.SelectedValue = ds.Tables(0).Rows(0)("TIPOCONTENEDOR")
                    End Select

                    If (ds.Tables(0).Rows(0)("TIPO").ToString = "COLLECT") Then
                        Me.rbtnCollect.Checked = True
                        Me.rbtnPrepaid.Checked = False
                    Else
                        Me.rbtnCollect.Checked = False
                        Me.rbtnPrepaid.Checked = True
                    End If

                    'Si ya hay factura se deshabilita el boton de facturar
                    If (CInt(ds.Tables(0).Rows(0)("FACTURA")) > 0) Then
                        Me.btnFacturar.Enabled = False
                    Else
                        Me.btnFacturar.Enabled = True
                    End If
                    'Me.btnListoHija.Enabled = True
                    Me.btnVisualizar.Enabled = True

                End If
                Cursor = Cursors.Default
            Catch ex As Exception
                Cursor = Cursors.Default
                MessageBox.Show("Ocurrió un error al traer la información de la hija: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End Try
        End If

        Me.CargarGrillaValor1(True)
        Me.CargarGrillaValor2(True)
        Me.TotalizarValores()
        Me.lblMonedaSubtotal1.Text = Me.drpMonedaTotalizar.Text
        Me.lblMonedaSubTotal2.Text = Me.drpMonedaTotalizar.Text
        Me.lblMonedaIVA.Text = Me.drpMonedaTotalizar.Text
        Me.lblMonedaTotal.Text = Me.drpMonedaTotalizar.Text

    End Sub

    Private Sub CargarGrillaValor1(ByVal consultaBD As Boolean)
        Try
            Cursor = Cursors.WaitCursor
            Me.grdValor1.DataSource = Nothing
            Me.grdValor1.Columns.Clear()

            If (consultaBD) Then
                Dim ds As New DataSet
                ds = Me.oFact.GetValores1(Me.idHija)
                Me.dtValor1 = ds.Tables(0).Copy
            End If

            If (Me.dtValor1.Rows.Count > 0) Then
                Me.grdValor1.DataSource = Me.dtValor1
                Dim iconoEDITAR As New DataGridViewImageColumn()
                iconoEDITAR.ValuesAreIcons = False
                iconoEDITAR.Image = My.Resources.editar
                iconoEDITAR.HeaderText = "EDITAR"
                iconoEDITAR.Name = "EDITAR"
                Me.grdValor1.Columns.Add(iconoEDITAR)

                Dim iconoELIMINAR As New DataGridViewImageColumn()
                iconoELIMINAR.ValuesAreIcons = False
                iconoELIMINAR.Image = My.Resources.eliminar
                iconoELIMINAR.HeaderText = "ELIMINAR"
                iconoELIMINAR.Name = "ELIMINAR"
                Me.grdValor1.Columns.Add(iconoELIMINAR)

                Me.grdValor1.Columns("ID").Visible = False
                Me.grdValor1.Columns("IVA").Visible = False
                Me.grdValor1.Columns("IDAGENTE").Visible = False
                Me.grdValor1.Columns("IDMONEDA").Visible = False
                Me.grdValor1.Columns("IDCONCEPTO").Visible = False
                Me.grdValor1.Columns("EDITAR").Width = 60
                Me.grdValor1.Columns("ELIMINAR").Width = 70
            End If
            Cursor = Cursors.Default
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("Ocurrió un error al cargar los valores: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub CargarGrillaValor2(ByVal consultaBD As Boolean)
        Try
            Cursor = Cursors.WaitCursor
            Me.grdValor2.DataSource = Nothing
            Me.grdValor2.Columns.Clear()

            If (consultaBD) Then
                Dim ds As New DataSet
                ds = Me.oFact.GetValores2(Me.idHija)
                Me.dtValor2 = ds.Tables(0).Copy
            End If

            If (Me.dtValor2.Rows.Count > 0) Then
                Me.grdValor2.DataSource = Me.dtValor2
                Dim iconoEDITAR As New DataGridViewImageColumn()
                iconoEDITAR.ValuesAreIcons = False
                iconoEDITAR.Image = My.Resources.editar
                iconoEDITAR.HeaderText = "EDITAR"
                iconoEDITAR.Name = "EDITAR"
                Me.grdValor2.Columns.Add(iconoEDITAR)

                Dim iconoELIMINAR As New DataGridViewImageColumn()
                iconoELIMINAR.ValuesAreIcons = False
                iconoELIMINAR.Image = My.Resources.eliminar
                iconoELIMINAR.HeaderText = "ELIMINAR"
                iconoELIMINAR.Name = "ELIMINAR"
                Me.grdValor2.Columns.Add(iconoELIMINAR)

                Me.grdValor2.Columns("ID").Visible = False
                If (Me.grdValor1.Columns.Contains("IVA")) Then
                    Me.grdValor1.Columns("IVA").Visible = False
                End If
                Me.grdValor2.Columns("IDCONCEPTO").Visible = False
                Me.grdValor2.Columns("IDMONEDA").Visible = False
                Me.grdValor2.Columns("EDITAR").Width = 60
                Me.grdValor2.Columns("ELIMINAR").Width = 70
            End If
            Cursor = Cursors.Default
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("Ocurrió un error al cargar los valores: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub btnListoValor1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListoValor1.Click
        '*** Agrega o edita el registro a la tabla y recarga la grilla 
        If (Me.ValidarValor1()) Then
            Try
                Cursor = Cursors.WaitCursor

                'Se obtiene la info del concepto que se va a agregar
                Dim tipo As String = ""
                Dim valor As Double = 0
                Dim iva As Boolean = False
                Dim minimo As Double = 0
                For i As Integer = 0 To Me.dtConceptos.Rows.Count - 1
                    If (Me.dtConceptos.Rows(i)("ID").ToString = Me.drpConceptoTercero.SelectedValue) Then
                        tipo = Me.dtConceptos.Rows(i)("TIPO")
                        valor = Me.dtConceptos.Rows(i)("VALOR")
                        iva = Me.dtConceptos.Rows(i)("IVA")
                        minimo = Me.dtConceptos.Rows(i)("MINIMO")
                        Exit For
                    End If
                Next

                Select Case tipo
                    Case "FIJO"
                        Me.txtValorValor1.Text = valor
                    Case "LIBRE"
                        If (CDbl(Me.txtValorValor1.Text) < minimo) Then
                            Me.txtValorValor1.Text = minimo
                        End If
                    Case "KILOS"
                        Me.txtValorValor1.Text = CUtil.FormatearNumero(Me.txtValorValor1.Text)
                        valor = Me.txtValorValor1.Text

                        'El calculo depende de la unidad de peso seleccionada
                        Select Case Me.drpUnidadPeso.SelectedValue
                            Case "LIBRA"
                                Me.txtValorValor1.Text = (CDbl(Me.txtPeso.Text) / 2.20462) * valor
                            Case "KILO"
                                Me.txtValorValor1.Text = CDbl(Me.txtPeso.Text) * valor
                            Case "TONELADA"
                                Me.txtValorValor1.Text = (CDbl(Me.txtPeso.Text) * 1000) * valor
                        End Select
                        If (CDbl(Me.txtValorValor1.Text) < minimo) Then
                            Me.txtValorValor1.Text = minimo
                        End If
                End Select

                'Si se esta editando un contacto lo modifica en la tabla
                If (Me.idValor1 > 0) Then
                    For i As Integer = 0 To Me.dtValor1.Rows.Count - 1
                        If (Me.dtValor1.Rows(i)("ID").ToString = Me.idValor1.ToString) Then
                            Me.dtValor1.Rows(i)("IDCONCEPTO") = Me.drpConceptoTercero.SelectedValue
                            Me.dtValor1.Rows(i)("CONCEPTO") = Me.drpConceptoTercero.Text
                            Me.dtValor1.Rows(i)("IDMONEDA") = Me.drpMonedaValor1.SelectedValue
                            Me.dtValor1.Rows(i)("MONEDA") = Me.drpMonedaValor1.Text
                            Me.dtValor1.Rows(i)("IDAGENTE") = Me.drpAgente.SelectedValue
                            Me.dtValor1.Rows(i)("AGENTE") = Me.drpAgente.Text
                            Me.dtValor1.Rows(i)("VALOR") = Me.txtValorValor1.Text
                            If (iva) Then
                                Me.dtValor1.Rows(i)("IVA") = CDbl(Me.txtValorValor1.Text) * 0.16
                            Else
                                Me.dtValor1.Rows(i)("IVA") = 0
                            End If
                        End If
                    Next
                Else
                    'Se esta agregando un nuevo registro, se agrega a la tabla                    
                    Dim dr As DataRow
                    dr = Me.dtValor1.NewRow
                    dr("ID") = Me.contadorValor1
                    Me.contadorValor1 = Me.contadorValor1 + 1
                    dr("IDCONCEPTO") = Me.drpConceptoTercero.SelectedValue
                    dr("CONCEPTO") = Me.drpConceptoTercero.Text
                    dr("IDMONEDA") = Me.drpMonedaValor1.SelectedValue
                    dr("MONEDA") = Me.drpMonedaValor1.Text
                    dr("IDAGENTE") = Me.drpAgente.SelectedValue
                    dr("AGENTE") = Me.drpAgente.Text
                    dr("VALOR") = Me.txtValorValor1.Text
                    If (iva) Then
                        dr("IVA") = CDbl(Me.txtValorValor1.Text) * 0.16
                    Else
                        dr("IVA") = 0
                    End If

                    Me.dtValor1.Rows.Add(dr)
                End If
                Me.dtValor1.AcceptChanges()

                'Recarga la grilla de los contactos
                Me.CargarGrillaValor1(False)

                'Calcula subtotales
                Me.TotalizarValores()

                'Recorre los conceptos (la grilla de abajo) para verificar cuáles necesitan ser recalculados
                Dim totalTerceros As Double = CDbl(Me.lblSubTotalTerceros.Text)
                Dim porcentaje As Double = 0
                Dim nuevoValor As Double = 0
                For i As Integer = 0 To Me.grdValor2.Rows.Count - 1
                    For j As Integer = 0 To Me.dtConceptos.Rows.Count - 1
                        If (Me.grdValor2.Rows(i).Cells("IDCONCEPTO").Value.ToString = Me.dtConceptos.Rows(j)("ID").ToString) Then
                            'Si el concepto es de tipo porcentaje se recalcula
                            If (Me.dtConceptos.Rows(j)("TIPO").ToString = "PORCENTAJE") Then
                                'Se calcula el porcentaje que se le habia asignado
                                porcentaje = (CDbl(Me.grdValor2.Rows(i).Cells("VALOR").Value) / totalTerceros) * 100
                                'Se calcula el nuevo valor que debe tener el registro
                                nuevoValor = (totalTerceros + CDbl(Me.txtValorValor1.Text)) * (porcentaje / 100)
                                'Busca el registro modificado en la tabla
                                For k As Integer = 0 To Me.dtValor2.Rows.Count - 1
                                    If (Me.grdValor2.Rows(i).Cells("IDCONCEPTO").Value.ToString = Me.dtValor2.Rows(k)("IDCONCEPTO").ToString) Then
                                        Me.dtValor2.Rows(k)("VALOR") = nuevoValor
                                        Exit For
                                    End If
                                Next
                            End If
                        End If
                    Next
                Next

                Me.LimpiarValor1()
                Cursor = Cursors.Default
            Catch ex As Exception
                Cursor = Cursors.Default
                MessageBox.Show("Ocurrió un error al agregar el concepto: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End Try
        End If
    End Sub

    Private Sub btnListoValor2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListoValor2.Click
        '*** Agrega o edita el registro a la tabla y recarga la grilla 
        If (Me.ValidarValor2()) Then
            Try
                Cursor = Cursors.WaitCursor

                'Se obtiene la info del concepto que se va a agregar
                Dim tipo As String = ""
                Dim valor As Double = 0
                Dim iva As Boolean = False
                Dim minimo As Double = 0
                For i As Integer = 0 To Me.dtConceptos.Rows.Count - 1
                    If (Me.dtConceptos.Rows(i)("ID").ToString = Me.drpConcepto.SelectedValue) Then
                        tipo = Me.dtConceptos.Rows(i)("TIPO")
                        valor = Me.dtConceptos.Rows(i)("VALOR")
                        iva = Me.dtConceptos.Rows(i)("IVA")
                        minimo = Me.dtConceptos.Rows(i)("MINIMO")
                        Exit For
                    End If
                Next

                Dim subTotalTerceros As Double = 0
                If (Me.lblSubTotalTerceros.Text <> "") Then
                    subTotalTerceros = Me.lblSubTotalTerceros.Text
                End If

                Select Case tipo
                    Case "PORCENTAJE"
                        Me.txtValorValor2.Text = subTotalTerceros * (valor / 100)
                        If (CDbl(Me.txtValorValor2.Text) < minimo) Then
                            Me.txtValorValor2.Text = minimo
                        End If
                    Case "FIJO"
                        Me.txtValorValor2.Text = valor
                    Case "LIBRE"
                        If (CDbl(Me.txtValorValor2.Text) < minimo) Then
                            Me.txtValorValor2.Text = minimo
                        End If
                    Case "KILOS"
                        Me.txtValorValor2.Text = CUtil.FormatearNumero(Me.txtValorValor2.Text)
                        valor = Me.txtValorValor2.Text

                        'El calculo depende de la unidad de peso seleccionada
                        Select Case Me.drpUnidadPeso.SelectedValue
                            Case "LIBRA"
                                Me.txtValorValor2.Text = (CDbl(Me.txtPeso.Text) / 2.20462) * valor
                            Case "KILO"
                                Me.txtValorValor2.Text = CDbl(Me.txtPeso.Text) * valor
                            Case "TONELADA"
                                Me.txtValorValor2.Text = (CDbl(Me.txtPeso.Text) * 1000) * valor
                        End Select
                        If (CDbl(Me.txtValorValor2.Text) < minimo) Then
                            Me.txtValorValor2.Text = minimo
                        End If
                End Select

                'Si se esta editando un registro lo modifica en la tabla
                If (Me.idValor2 > 0) Then
                    For i As Integer = 0 To Me.dtValor2.Rows.Count - 1
                        If (Me.dtValor2.Rows(i)("ID").ToString = Me.idValor2.ToString) Then
                            Me.dtValor2.Rows(i)("IDCONCEPTO") = Me.drpConcepto.SelectedValue
                            If (iva) Then
                                Me.dtValor2.Rows(i)("CONCEPTO") = Me.drpConcepto.Text
                            Else
                                Me.dtValor2.Rows(i)("CONCEPTO") = Me.drpConcepto.Text & " (Sin IVA)"
                            End If
                            Me.dtValor2.Rows(i)("VALOR") = Me.txtValorValor2.Text
                            'Si tipo es porcentaje se añade el % en el texto del concepto
                            If (tipo = "PORCENTAJE") Then
                                Me.dtValor2.Rows(i)("CONCEPTO") = Me.dtValor2.Rows(i)("CONCEPTO") & " (" & valor & "%)"
                            End If
                            Me.dtValor2.Rows(i)("IDMONEDA") = Me.drpMonedaValor1.SelectedValue
                            Me.dtValor2.Rows(i)("MONEDA") = Me.drpMonedaValor1.Text
                            If (iva) Then
                                Me.dtValor2.Rows(i)("IVA") = CDbl(Me.txtValorValor2.Text) * 0.16
                            Else
                                Me.dtValor2.Rows(i)("IVA") = 0
                            End If
                        End If
                    Next
                Else
                    'Se esta agregando un nuevo registro, se agrega a la tabla                    
                    Dim dr As DataRow
                    dr = Me.dtValor2.NewRow
                    dr("ID") = Me.contadorValor2
                    Me.contadorValor2 = Me.contadorValor2 + 1
                    dr("IDCONCEPTO") = Me.drpConcepto.SelectedValue
                    If (iva) Then
                        dr("CONCEPTO") = Me.drpConcepto.Text
                    Else
                        dr("CONCEPTO") = Me.drpConcepto.Text & " (Sin IVA)"
                    End If
                    dr("VALOR") = CUtil.FormatearNumero(Me.txtValorValor2.Text)
                    'Si tipo es porcentaje se añade el % en el texto del concepto
                    If (tipo = "PORCENTAJE") Then
                        dr("CONCEPTO") = dr("CONCEPTO") & " (" & valor & "%)"
                    End If
                    dr("IDMONEDA") = Me.drpMonedaValor1.SelectedValue
                    dr("MONEDA") = Me.drpMonedaValor1.Text
                    If (iva) Then
                        dr("IVA") = CDbl(Me.txtValorValor2.Text) * 0.16
                    Else
                        dr("IVA") = 0
                    End If

                    Me.dtValor2.Rows.Add(dr)
                End If
                Me.dtValor2.AcceptChanges()

                'Recarga la grilla de los contactos
                Me.CargarGrillaValor2(False)
                Me.TotalizarValores()
                Me.LimpiarValor2()
                Cursor = Cursors.Default
            Catch ex As Exception
                Cursor = Cursors.Default
                MessageBox.Show("Ocurrió un error al agregar el concepto: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End Try
        End If
    End Sub

    Private Sub TotalizarValores()
        'Totaliza los conceptos para terceros
        Dim subTotal As Double = 0
        Dim cambio As Double = 0
        Dim seDivide As Boolean = True
        For i As Integer = 0 To Me.dtValor1.Rows.Count - 1
            'Si la moneda es diferente
            cambio = 1
            If (Me.dtValor1.Rows(i)("IDMONEDA").ToString <> Me.drpMonedaTotalizar.SelectedValue) Then
                seDivide = True
                cambio = Me.oFact.GetCambio(CInt(Me.drpMonedaTotalizar.SelectedValue), CInt(Me.dtValor1.Rows(i)("IDMONEDA").ToString), CUtil.ConvertirFecha(Me.dateFecha.Value))
                'Si no se encontro el cambio se busca con las monedas cambiadas
                If (cambio = 0) Then
                    seDivide = False
                    cambio = Me.oFact.GetCambio(CInt(Me.dtValor1.Rows(i)("IDMONEDA").ToString), CInt(Me.drpMonedaTotalizar.SelectedValue), CUtil.ConvertirFecha(Date.Today))
                Else
                    If cambio < 1 Then
                        seDivide = False
                    End If
                End If
            End If

            If (seDivide) Then
                subTotal = subTotal + (Me.dtValor1.Rows(i)("VALOR") / cambio)
            Else
                subTotal = subTotal + (Me.dtValor1.Rows(i)("VALOR") * cambio)
            End If
        Next
        Me.lblSubTotalTerceros.Text = FormatNumber(subTotal, 2).ToString
        Me.lblTRM.Text = "TRM: " & cambio


        'Totaliza los otros conceptos y va calculando el respectivo iva
        Dim subTotalConceptos As Double = 0
        Dim ivas As Double = 0
        For i As Integer = 0 To Me.dtValor2.Rows.Count - 1
            'Si la moneda es diferente
            cambio = 1
            If (Me.dtValor2.Rows(i)("IDMONEDA").ToString <> Me.drpMonedaTotalizar.SelectedValue) Then
                seDivide = True
                cambio = Me.oFact.GetCambio(CInt(Me.drpMonedaTotalizar.SelectedValue), CInt(Me.dtValor2.Rows(i)("IDMONEDA").ToString), CUtil.ConvertirFecha(Me.dateFecha.Value))
                'Si no se encontro el cambio se busca con las monedas cambiadas
                If (cambio = 0) Then
                    seDivide = False
                    cambio = Me.oFact.GetCambio(CInt(Me.dtValor2.Rows(i)("IDMONEDA").ToString), CInt(Me.drpMonedaTotalizar.SelectedValue), CUtil.ConvertirFecha(Date.Today))
                Else
                    If cambio < 1 Then
                        seDivide = False
                    End If
                End If
            End If

            If (seDivide) Then
                subTotalConceptos = subTotalConceptos + (Me.dtValor2.Rows(i)("VALOR") / cambio)
                ivas = ivas + (Me.dtValor2.Rows(i)("IVA") / cambio)
            Else
                subTotalConceptos = subTotalConceptos + (Me.dtValor2.Rows(i)("VALOR") * cambio)
                ivas = ivas + (Me.dtValor2.Rows(i)("IVA") * cambio)
            End If
        Next
        Me.lblSubTotalConceptos.Text = FormatNumber(subTotalConceptos, 2).ToString
        Me.lblTotalIVAs.Text = FormatNumber(ivas, 2).ToString
        Me.lblTotal.Text = FormatNumber(CDbl(subTotal) + CDbl(subTotalConceptos) + ivas, 2)
    End Sub

    Private Sub btnListoHija_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListoHija.Click
        '*** Guarda en la bd la info que se esta editando o creando
        If (Me.Validar()) Then
            Try
                Cursor = Cursors.WaitCursor

                Dim facturarPor As String = ""
                Dim bultos As Integer = 0
                Dim peso As Double = 0
                Dim volumen As Double = 0
                Dim numeroContenedores As Integer = 0
                Dim fecha As String = ""
                Dim mes As String = ""
                Dim dia As String = ""
                Dim consecutivoControl As Integer = 0
                Dim fechaPago As String = ""

                If (Me.dateFecha.Checked) Then
                    mes = Me.dateFecha.Value.Month
                    dia = Me.dateFecha.Value.Day
                    If (mes.Length = 1) Then
                        mes = "0" & mes
                    End If
                    If (dia.Length = 1) Then
                        dia = "0" & dia
                    End If
                    fecha = Me.dateFecha.Value.Year & mes & dia
                End If

                mes = Me.dateFechaPago.Value.Month
                dia = Me.dateFechaPago.Value.Day
                If (mes.Length = 1) Then
                    mes = "0" & mes
                End If
                If (dia.Length = 1) Then
                    dia = "0" & dia
                End If
                fechaPago = Me.dateFechaPago.Value.Year & mes & dia

                If (Me.rbtnPeso.Checked) Then
                    facturarPor = "PESO"
                ElseIf (Me.rbtnVolumen.Checked) Then
                    facturarPor = "VOLUMEN"
                ElseIf (Me.rbtnContenedores.Checked) Then
                    facturarPor = "CONTENEDORES"
                End If
                If (Me.txtBultos.Text <> "") Then
                    bultos = Me.txtBultos.Text
                End If
                If (Me.txtPeso.Text <> "") Then
                    peso = CUtil.FormatearNumero(Me.txtPeso.Text)
                End If
                If (Me.txtVolumen.Text <> "") Then
                    volumen = CUtil.FormatearNumero(Me.txtVolumen.Text)
                End If
                If (Me.txtNumeroContenedores.Text <> "") Then
                    numeroContenedores = Me.txtNumeroContenedores.Text
                End If
                If (Me.idHija = 0) Then
                    consecutivoControl = Me.oFact.GetSiguienteNumeroHija + 1
                Else
                    consecutivoControl = Me.txtConsecutivoControl.Text
                End If
                'If (Me.txtConsecutivoControl.Enabled) Then
                'consecutivoControl = Me.txtConsecutivoControl.Text
                'End If

                Dim trm As Double = 0
                Dim strTrm As String = Trim(Me.lblTRM.Text.Replace("TRM:", ""))
                trm = strTrm

                Dim numero As String = Me.txtNumero.Text

                Dim tipo As String = ""
                If (Me.rbtnCollect.Checked) Then
                    tipo = "COLLECT"
                Else
                    tipo = "PREPAID"
                End If

                'Se valida que el numero de la hija no se repita
                If (Me.oFact.ValidarNumeroHija(Me.idHija, consecutivoControl)) Then
                    Me.idHija = Me.oFact.ActualizarHija(Me.idHija, Me.idConsolidado, CInt(Me.drpMonedaTotalizar.SelectedValue), CInt(Me.drpCliente.SelectedValue), CInt(Me.drpContacto.SelectedValue), bultos, facturarPor, peso, Me.drpUnidadPeso.SelectedValue, volumen, numeroContenedores, Me.drpTiposContenedor.SelectedValue, fecha, Trim(Me.txtComentarios.Text), trm, Me.txtDescripcionCarga.Text, consecutivoControl, numero, tipo, "", "19000101", "", 0, "19000101", 0, 0, fechaPago)

                    'Recorre los valores y los va actualizando. Los valore1 no se guardan si el tipo es prepaid
                    If (tipo = "COLLECT") Then
                        Dim idCont As Integer = 0
                        For i As Integer = 0 To Me.dtValor1.Rows.Count - 1
                            If (CInt(Me.dtValor1.Rows(i)("ID").ToString) < 100000) Then
                                idCont = CInt(Me.dtValor1.Rows(i)("ID").ToString)
                            Else
                                idCont = 0
                            End If
                            Me.oFact.ActualizarValor1(idCont, Me.idHija, CInt(Me.dtValor1.Rows(i)("IDCONCEPTO").ToString), CInt(Me.dtValor1.Rows(i)("IDMONEDA").ToString), CInt(Me.dtValor1.Rows(i)("IDAGENTE").ToString), CDbl(Me.dtValor1.Rows(i)("VALOR").ToString), Me.dtValor1.Rows(i)("CONCEPTO").ToString, CDbl(Me.dtValor1.Rows(i)("IVA").ToString))
                        Next
                    End If

                    'Recorre los conceptos y los va actualizando
                    Dim idCont2 As Integer = 0
                    For i As Integer = 0 To Me.dtValor2.Rows.Count - 1
                        If (CInt(Me.dtValor2.Rows(i)("ID").ToString) < 100000) Then
                            idCont2 = CInt(Me.dtValor2.Rows(i)("ID").ToString)
                        Else
                            idCont2 = 0
                        End If
                        Me.oFact.ActualizarValor2(idCont2, Me.idHija, CInt(Me.dtValor2.Rows(i)("IDCONCEPTO").ToString), CDbl(Me.dtValor2.Rows(i)("VALOR").ToString), Me.dtValor2.Rows(i)("CONCEPTO").ToString, CInt(Me.dtValor2.Rows(i)("IDMONEDA").ToString), CDbl(Me.dtValor2.Rows(i)("IVA").ToString))
                    Next

                    Cursor = Cursors.Default
                    MessageBox.Show("La hija se guardó exitosamente", "Hija", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Me.LimpiarTodo()
                    Me.TabControl1.SelectedTab = Me.tabListado
                    Me.CargarGrilla()
                    Me.btnVisualizar.Enabled = True
                Else
                    MessageBox.Show("No se modificó la hija porque el número ya existe en otra hija", "Número de hija repetido", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                End If

            Catch ex As Exception
                Cursor = Cursors.Default
                MessageBox.Show("No se guardó la información de la hija: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End Try
        End If

    End Sub

    Private Sub btnNuevaHija_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevaHija.Click
        Me.LimpiarTodo()
        Me.TabControl1.SelectedTab = Me.tabHijas
        Me.btnVisualizar.Enabled = False
    End Sub

#Region "TRM"

    Private Sub drpMonedaTotalizar_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles drpMonedaTotalizar.SelectionChangeCommitted
        If (Me.drpMonedaTotalizar.SelectedValue <> "0") Then
            Me.lblMonedaSubtotal1.Text = Me.drpMonedaTotalizar.Text
            Me.lblMonedaSubTotal2.Text = Me.drpMonedaTotalizar.Text
            Me.lblMonedaIVA.Text = Me.drpMonedaTotalizar.Text
            Me.lblMonedaTotal.Text = Me.drpMonedaTotalizar.Text
        Else
            Me.lblMonedaSubtotal1.Text = ""
            Me.lblMonedaSubTotal2.Text = ""
            Me.lblMonedaIVA.Text = ""
            Me.lblMonedaTotal.Text = ""
        End If
        'La validacion de la trm se hará cuando se vaya a guardar la hija
        'Me.TraerTRM(CInt(Me.drpMonedaTotalizar.SelectedValue), CUtil.ConvertirFecha(Date.Today))
    End Sub

    Private Sub TraerTRM(ByVal idMoneda As Integer, ByVal fecha As String)
        'Se valida que a la moneda seleccionada se le ha definido la trm para el día de hoy
        Try
            Dim valorTRM2 As Double = Me.oFact.GetTrmMoneda(idMoneda, fecha)

            'Si el valor es 0 
            If (valorTRM2 = 0) Then
                'Me.btnListoHija.Enabled = False
                MessageBox.Show("No se ha definido la trm para hoy de la moneda seleccionada", "No existe TRM", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            Else
                Me.lblTRM.Text = "TRM: " & valorTRM2.ToString
                Me.valorTRM = valorTRM2
                'Me.btnListoHija.Enabled = True
            End If

        Catch ex As Exception
            MessageBox.Show("No se pudo validar la trm de la moneda seleccionada: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub btnCrearTRM_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrearTRM.Click
        My.Forms.Trm.MdiParent = My.Forms.Principal
        My.Forms.Trm.Show()
    End Sub

    Public Sub RecargarTRM()
        Me.CargarMonedas()
        If (Me.drpMonedaTotalizar.Items.Count = 0) Then
            Me.drpMonedaTotalizar.Items.Add("No hay registros")
        End If
        Me.drpMonedaTotalizar.SelectedIndex = 0
        MessageBox.Show("Debe seleccionar de nuevo la moneda en la hija", "TRM", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub

#End Region


    Private Sub btnFacturar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFacturar.Click
        Try
            Cursor = Cursors.WaitCursor
            Dim result As String = Me.oFact.AsignarFactura(Me.idHija, "TERCEROS")
            Cursor = Cursors.Default
            'Si result es difernete de vacío no se pudo asignar la factura.
            If (result <> "") Then
                MessageBox.Show(result, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Exit Sub
            End If

        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("NO se pudo facturar: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try

        'Todo salio bien y la factura fue asignada
        My.Forms.Factura.idHija = Me.idHija
        My.Forms.Factura.subTotal1 = CDbl(Me.lblSubTotalTerceros.Text)
        My.Forms.Factura.subTotal2 = CDbl(Me.lblSubTotalConceptos.Text)
        My.Forms.Factura.totalIVA = CDbl(Me.lblTotalIVAs.Text)
        My.Forms.Factura.total = CDbl(Me.lblTotal.Text)
        My.Forms.Factura.MdiParent = My.Forms.Principal
        My.Forms.Factura.Show()
    End Sub

#Region "Eventos de botones para crear conceptos"

    Private Sub btnCrearConcepto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrearConcepto.Click
        My.Forms.Conceptos.MdiParent = My.Forms.Principal
        My.Forms.Conceptos.Show()
    End Sub

    Private Sub btnCrearConcepto2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrearConcepto2.Click
        My.Forms.Conceptos.MdiParent = My.Forms.Principal
        My.Forms.Conceptos.Show()
    End Sub

#End Region

#Region "Busqueda de hijas"

    Private Sub btnOcultarMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOcultarMenu.Click
        'Muestra/Oculta el panel de los filtros
        If Me.Panel1.Size.Height <= 30 Then
            Me.Panel1.Size = New Size(Me.Panel1.Width, 163)
            Me.btnOcultarMenu.Image = My.Resources.arriba
        Else
            Me.Panel1.Size = New Size(Me.Panel1.Width, 15)
            Me.btnOcultarMenu.Image = My.Resources.abajo
        End If
    End Sub

    Public Sub CargarCiudades()
        Dim ds As New DataSet
        ds = Me.oMaestra.GetListadoCiudades()
        If (ds.Tables(0).Rows.Count > 0) Then
            Dim dt1 As DataTable = ds.Tables(0).Copy
            Dim dt2 As DataTable = ds.Tables(0).Copy
            Dim dt3 As DataTable = ds.Tables(0).Copy

            Me.drpOrigenBuscar.DataSource = CUtil.AgregarRegistro(ds.Tables(0), "Todas...")
            Me.drpOrigenBuscar.ValueMember = ds.Tables(0).Columns(0).ColumnName
            Me.drpOrigenBuscar.DisplayMember = ds.Tables(0).Columns(1).ColumnName

            Me.drpDestinoBuscar.DataSource = CUtil.AgregarRegistro(dt1, "Todas...")
            Me.drpDestinoBuscar.ValueMember = dt1.Columns(0).ColumnName
            Me.drpDestinoBuscar.DisplayMember = dt1.Columns(1).ColumnName
        End If
    End Sub


    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        Dim ds As New DataSet
        Try
            Cursor = Cursors.WaitCursor
            Dim numero As Integer = 0
            Dim factura As Integer = 0
            Dim desde As String = ""
            Dim hasta As String = ""
            If (Trim(Me.txtConsolidadoBuscar.Text).Length > 0) Then
                If IsNumeric(Me.txtConsolidadoBuscar.Text) Then
                    numero = Me.txtConsolidadoBuscar.Text
                End If
            End If
            If (Trim(Me.txtFactura.Text).Length > 0) Then
                If IsNumeric(Me.txtFactura.Text) Then
                    factura = Me.txtFactura.Text
                End If
            End If
            Dim mes As String = ""
            Dim dia As String = ""
            If (Me.dateFechaDesde.Checked) Then
                mes = Me.dateFechaDesde.Value.Month
                dia = Me.dateFechaDesde.Value.Day
                If (mes.Length = 1) Then
                    mes = "0" & mes
                End If
                If (dia.Length = 1) Then
                    dia = "0" & dia
                End If
                desde = Me.dateFechaDesde.Value.Year & mes & dia
            End If
            If (Me.dateFechaHasta.Checked) Then
                mes = Me.dateFechaHasta.Value.Month
                dia = Me.dateFechaHasta.Value.Day
                If (mes.Length = 1) Then
                    mes = "0" & mes
                End If
                If (dia.Length = 1) Then
                    dia = "0" & dia
                End If
                hasta = Me.dateFechaHasta.Value.Year & mes & dia
            End If

            ds = Me.oFact.BuscarHijas(numero, "0", CInt(Me.drpOrigenBuscar.SelectedValue), CInt(Me.drpDestinoBuscar.SelectedValue), factura, CInt(Me.drpClienteBuscar.SelectedValue), desde, hasta, "MARITIMO")

            'Carga la grilla con los resultados obtenidos
            Me.CargarGrillaBusqueda(ds.Tables(0))

            Cursor = Cursors.Default
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("Ocurrió un error al realizar a búsqueda: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try

    End Sub

    ''' <summary>
    ''' Carga la grilla cuando se hace una búsqueda de hijas
    ''' </summary>
    ''' <param name="tabla"></param>
    ''' <remarks></remarks>
    Private Sub CargarGrillaBusqueda(ByVal tabla As DataTable)
        Me.grdHijas.DataSource = Nothing
        Me.grdHijas.Columns.Clear()

        'Se limpia info general del consolidado
        Me.lblNumeroConsolidado.Text = ""
        Me.lblAgente.Text = ""
        Me.lblOrigen.Text = ""
        Me.lblDestino.Text = ""
        Me.lblTipo.Text = ""
        Me.lblTransporte.Text = ""
        Me.lblMAWB.Text = ""
        Me.lblFecha.Text = ""
        Me.txtConsolidado.Text = ""
        Me.txtHBL.Text = ""

        'Llena grilla de las hijas
        If (tabla.Rows.Count > 0) Then
            Me.grdHijas.DataSource = Nothing
            Me.grdHijas.Columns.Clear()
            Me.grdHijas.DataSource = tabla

            Dim iconoEDITAR As New DataGridViewImageColumn()
            iconoEDITAR.ValuesAreIcons = False
            iconoEDITAR.Image = My.Resources.editar
            iconoEDITAR.HeaderText = "EDITAR"
            iconoEDITAR.Name = "EDITAR"
            Me.grdHijas.Columns.Add(iconoEDITAR)

            Dim iconoELIMINAR As New DataGridViewImageColumn()
            iconoELIMINAR.ValuesAreIcons = False
            iconoELIMINAR.Image = My.Resources.eliminar
            iconoELIMINAR.HeaderText = "ELIMINAR"
            iconoELIMINAR.Name = "ELIMINAR"
            Me.grdHijas.Columns.Add(iconoELIMINAR)

            Me.grdHijas.Columns("ID").Visible = False
            Me.grdHijas.Columns("EDITAR").Width = 60
            Me.grdHijas.Columns("ELIMINAR").Width = 70
        Else
            Me.grdHijas.DataSource = Nothing
            Me.grdHijas.Columns.Clear()
        End If
    End Sub

#End Region


    Private Sub rbtnCollect_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbtnCollect.CheckedChanged
        If (Me.rbtnCollect.Checked) Then
            Me.btnListoValor1.Enabled = True
        Else
            Me.btnListoValor1.Enabled = False
        End If
    End Sub

    Private Sub btnVisualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVisualizar.Click
        My.Forms.Factura.idHija = Me.idHija
        My.Forms.Factura.subTotal1 = CDbl(Me.lblSubTotalTerceros.Text)
        My.Forms.Factura.subTotal2 = CDbl(Me.lblSubTotalConceptos.Text)
        My.Forms.Factura.totalIVA = CDbl(Me.lblTotalIVAs.Text)
        My.Forms.Factura.total = CDbl(Me.lblTotal.Text)
        My.Forms.Factura.MdiParent = My.Forms.Principal
        My.Forms.Factura.Show()
    End Sub

    Private Sub btnCrearCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrearCliente.Click
        My.Forms.Clientes.MdiParent = My.Forms.Principal
        My.Forms.Clientes.Show()
    End Sub

    Private Sub btnCrearAgente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrearAgente.Click
        My.Forms.Agentes.MdiParent = My.Forms.Principal
        My.Forms.Agentes.Show()
    End Sub

End Class